<?php
/**
 * 控制器的基类,可以按需求定制
 */
!defined('IN_FRAME') && die('404 Page');
abstract class Controller {
    
    private $_cache_seconds = 0; // 缓存的时间长度
    private $_cache_key = ''; // 缓存的key
    
    /**
     * 构造方法
     */
    public function __construct() {
        // TODO
    }
    
    /**
     * 默认的首页
     * --- 若无特别需求,请勿修改此函数,谢谢 ---
     */
    public function index() {
        echo 'Waiting for index page...';
    }
    
    /**
     * _remap() 方法
     */
    public function _remap($strAction) {
        Helper::jsLoadTo('/', '页面不存在!');
    }
    
    /**
     * 缓存设置,此处可以自定义
     */
    private function _setCache() {
        phpFastCache::$storage = 'files';
        phpFastCache::$securityKey = 'pages';
        phpFastCache::$path = CACHES_PATH;
    }
    
    /**
     * 缓存,如果有必要,缓存的key可以加密
     */
    protected function _cache($intSeconds = 0, $strExt = '') {
        $this->_cache_seconds = $intSeconds;
        $this->_cache_key = _ROUTE_M_ . '_' . _ROUTE_C_ . '_' . _ROUTE_A_;
        !empty($strExt) && $this->_cache_key .= '_' . $strExt;
        if ($intSeconds > 0) {
            $this->_setCache();
            $strContent = phpFastCache::get($this->_cache_key);
            if (null !== $strContent) {
                exit($strContent);
            }
        }
    }
    
    /**
     * 输出页面,并按需要做缓存
     */
    protected function _display($strPath, $arrAssign = null) {
        $strPath = TPL_PATH . '/' . $strPath;
        if (file_exists($strPath)) {
            if (is_array($arrAssign) && count($arrAssign) > 0) {
                extract($arrAssign);
            }
            ob_start();
            include($strPath);
            if ($this->_cache_seconds > 0) {
                $this->_setCache();
                phpFastCache::set($this->_cache_key, ob_get_contents(), $this->_cache_seconds, false);
            }
            ob_flush();
            exit();
        } else {
            exit('Template error : ' . $strPath);
        }
    }
}